import axios from 'axios'
import useUserStore from '@/store/modules/user'

const request = axios.create({
  // baseURL: import.meta.env.BASE_URL,
  baseURL: import.meta.env.VITE_SERVE,
  timeout: 10000,
})
request.interceptors.request.use(config => {
  const User = useUserStore()
  if (User.token) {
    config.headers.Authorization ='Bearer ' + User.token
  }
  return config
})
request.interceptors.response.use(
  response => {
    // // 成功响应处理（2xx状态码）
    // const res = response.data as ApiResponse

    // // 业务逻辑失败处理（success=false）
    // if (!res.success) {
    //   const error = new Error(res.message || 'Business logic error') as any
    //   error.code = res.errorCode
    //   error.status = response.status
    //   error.data = res.data
    //   return Promise.reject(error)
    // }

    // 真正成功的响应（success=true）
    return response.data // 直接返回数据本体
  },
  error => {
    // 错误响应处理（非2xx状态码）
    if (!error.response) {
      // 网络级错误（无响应）
      const networkError = new Error(error.message || 'Network Error') as any
      networkError.code = 'NETWORK_ERROR'
      networkError.status = 0
      return Promise.reject(networkError)
    }

    // 服务器返回的错误（有响应对象）
    const status = error.response.status
    const resData = error.response.data
    console.log(resData);

    // 优先使用服务器返回的错误信息(当返回默认信息时，返回的是一个默认对象，我们根据状态码自定义解析错误类型，而不会使用默认的提示)
    let errorMessage
    if( resData.title){
      errorMessage = getDefaultMessage(status)
    }else errorMessage = resData
    // const customError = new Error(errorMessage) as any
    // customError.code = err.state
    // customError.status = status
    // customError.data = resData?.data
    // customError.errors = resData?.errors

    return Promise.reject(new Error(errorMessage))
  }
)

// 状态码映射默认消息
function getDefaultMessage(status: number): string {
  const messages: Record<number, string> = {
    400: '请求参数错误',
    401: '身份验证失败',
    403: '访问被禁止',
    404: '资源不存在',
    409: '资源冲突',
    422: '参数验证失败',
    500: '服务器内部错误',
    502: '网关错误',
    503: '服务不可用'
  }
  return messages[status] || `未知错误（状态码：${status}）`
}

// // 状态码映射默认错误码
// function getDefaultErrorCode(status: number): string {
//   const codes: Record<number, string> = {
//     400: 'BAD_REQUEST',
//     401: 'UNAUTHORIZED',
//     403: 'FORBIDDEN',
//     404: 'NOT_FOUND',
//     422: 'VALIDATION_ERROR',
//     500: 'INTERNAL_SERVER_ERROR'
//   }
//   return codes[status] || 'UNKNOWN_ERROR'
// }
export default request

// request.interceptors.response.use(
//   res => {
//     // return res.data
//   },
//   error => {

//     if (!error.response) {
//       return Promise.reject(new Error(error.message))
//     }

//     console.log("请求错误")
//     console.log(error)



//     //处理网络错误
//     let msg = ''
//     let status = error.response.status
//     switch (status) {
//       case 401:
//         msg = 'token过期'
//         break
//       case 403:
//         msg = '无权访问'
//         break
//       case 404:
//         msg = '请求地址错误'
//         break
//       case 500:
//         msg = '服务器出现问题'
//         break
//       default:
//         msg = '无网络'
//     }
//     return Promise.reject(new Error(msg))
//   },
// )
